//#define _CRT_SECURE_NO_WARNINGS 1
//
//#include "unordered_map.h"
//using my_um::unordered_map;
//#include <iostream>
//using std::ostream;
//using std::cout;
//using std::endl;
//
//
//
//
//class Date
//{
//	friend struct HashDate;
//public:
//	Date(int year = 1900, int month = 1, int day = 1)
//		: _year(year)
//		, _month(month)
//		, _day(day)
//	{}
//
//	bool operator<(const Date& d)const
//	{
//		return (_year < d._year) ||
//			(_year == d._year && _month < d._month) ||
//			(_year == d._year && _month == d._month && _day < d._day);
//	}
//
//	bool operator>(const Date& d)const
//	{
//		return (_year > d._year) ||
//			(_year == d._year && _month > d._month) ||
//			(_year == d._year && _month == d._month && _day > d._day);
//	}
//
//	bool operator==(const Date& d) const
//	{
//		return _year == d._year
//			&& _month == d._month
//			&& _day == d._day;
//	}
//
//	friend ostream& operator<<(ostream& _cout, const Date& d);
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//ostream& operator<<(ostream& _cout, const Date& d)
//{
//	_cout << d._year << "-" << d._month << "-" << d._day;
//	return _cout;
//}
//
//struct HashDate
//{
//	size_t operator()(const Date& d)
//	{
//		size_t hash = 0;
//		hash += d._year;
//		hash *= 31;
//
//		hash += d._month;
//		hash *= 31;
//
//		hash += d._day;
//		hash *= 31;
//
//		return hash;
//	}
//};
//
//void test_unordered_map4()
//{
//	Date d1(2023, 3, 13);
//	Date d2(2023, 3, 13);
//	Date d3(2023, 3, 12);
//	Date d4(2023, 3, 11);
//	Date d5(2023, 3, 12);
//	Date d6(2023, 3, 13);
//
//	Date a[] = { d1, d2, d3, d4, d5, d6 };
//
//	unordered_map<Date, int, HashDate> countMap;
//	for (const auto& e : a)
//	{
//		++countMap[e];
//	}
//
//	for (auto& kv : countMap)
//	{
//		cout << kv.first << ":" << kv.second << endl;
//	}
//}
//
//int main()
//{
//	test_unordered_map4();
//	return 0;
//}